package model

import "time"

type ShoppingCart struct {
	BaseModel
	User    int32 `gorm:"type:int;index"` // 在购物车列表中我们需要查询当前用户的购物车记录
	Goods   int32 `gorm:"type:int;index"` // 加索引: 需要查询的时候 添加 1. 会影响插入性能 2. 会占用磁盘
	Nums    int32 `gorm:"type:int"`       // 购买的数量
	Checked bool  // 是否选中
}

func (ShoppingCart) TableName() string {
	return "shoppingcart"
}

type OrderInfo struct {
	BaseModel

	User    int32  `gorm:"type:int;index"`
	OrderSn string `gorm:"type:varchar(30);index"` // 订单号 自己生成的订单号
	PayType string `gorm:"type:varchar(20) comment 'alipay(支付宝)， wechat(微信)'"`

	//status大家可以考虑使用iota来做
	Status     string `gorm:"type:varchar(20)  comment 'PAYING(待支付), TRADE_SUCCESS(成功)， TRADE_CLOSED(超时关闭), WAIT_BUYER_PAY(交易创建), TRADE_FINISHED(交易结束)'"`
	TradeNo    string `gorm:"type:varchar(100) comment '交易号'"` // 交易号就是支付宝的订单号 查账
	OrderMount float32
	PayTime    *time.Time `gorm:"type:datetime comment '订单时间'"`

	Address      string `gorm:"type:varchar(100)"` // 收件人地址
	SignerName   string `gorm:"type:varchar(20)"`  // 收件人名字
	SingerMobile string `gorm:"type:varchar(11)"`  // 收件人手机号
	Post         string `gorm:"type:varchar(20)"`  // 留言信息
}

func (OrderInfo) TableName() string {
	return "orderinfo"
}

type OrderGoods struct {
	BaseModel

	Order int32 `gorm:"type:int;index"`
	Goods int32 `gorm:"type:int;index"`

	// 把商品的信息保存下来了	字段冗余, 实际高并发系统中我们一般都不会遵循三范式	做镜像 比如那个时候 商品的价格是多少
	GoodsName  string `gorm:"type:varchar(100);index"`
	GoodsImage string `gorm:"type:varchar(200)"`
	GoodsPrice float32
	Nums       int32 `gorm:"type:int"`
}

func (OrderGoods) TableName() string {
	return "ordergoods"
}
